import { message } from 'antd';
import * as XLSX from 'xlsx';

/**
 * 导出设备列表到Excel文件
 * @param {Array} devices - 设备列表数据
 * @param {string} filename - 导出的文件名
 */
export const exportDevicesToExcel = (devices, filename = '设备列表.xlsx') => {
  try {
    // 准备导出数据
    const exportData = devices.map(device => ({
      '设备名称': device.deviceName || '',
      '设备编号': device.deviceCode || '',
      '设备类型': device.deviceType || '',
      '生产日期': device.productionDate || '',
      '创建人': device.createdBy?.phone || '',
      '创建时间': device.createdAt || '',
      '更新时间': device.updatedAt || '',
      '描述': device.description || ''
    }));

    // 创建工作簿
    const wb = XLSX.utils.book_new();
    
    // 创建工作表
    const ws = XLSX.utils.json_to_sheet(exportData);
    
    // 设置列宽
    const columnWidths = [
      { wch: 20 }, // 设备名称
      { wch: 15 }, // 设备编号
      { wch: 12 }, // 设备类型
      { wch: 12 }, // 生产日期
      { wch: 10 }, // 创建人
      { wch: 20 }, // 创建时间
      { wch: 20 }, // 更新时间
      { wch: 40 }  // 描述
    ];
    ws['!cols'] = columnWidths;

    // 添加工作表到工作簿
    XLSX.utils.book_append_sheet(wb, ws, '设备列表');
    
    // 导出文件
    XLSX.writeFile(wb, filename);
    
    message.success('设备列表导出成功');
  } catch (error) {
    console.error('导出Excel失败:', error);
    message.error('导出Excel失败，请稍后再试');
  }
};

/**
 * 批量删除设备
 * @param {Array} selectedRowKeys - 选中的设备ID数组
 * @param {Function} deleteApi - 删除设备的API函数
 * @param {Function} refreshCallback - 删除成功后刷新列表的回调函数
 */
export const batchDeleteDevices = async (selectedRowKeys, deleteApi, refreshCallback) => {
  try {
    if (!selectedRowKeys || selectedRowKeys.length === 0) {
      message.warning('请先选择要删除的设备');
      return;
    }

    // 逐行删除设备（也可以根据API支持改为批量删除）
    const deletePromises = selectedRowKeys.map(id => deleteApi(id));
    
    // 等待所有删除操作完成
    await Promise.all(deletePromises);
    
    message.success(`成功删除${selectedRowKeys.length}台设备`);
    
    // 刷新设备列表
    if (refreshCallback && typeof refreshCallback === 'function') {
      refreshCallback();
    }
  } catch (error) {
    console.error('批量删除设备失败:', error);
    message.error('批量删除设备失败，请稍后再试');
  }
};

/**
 * 格式化导出文件名，添加时间戳
 * @param {string} baseName - 基础文件名
 * @param {string} extension - 文件扩展名
 * @returns {string} 格式化后的文件名
 */
export const formatExportFilename = (baseName, extension = 'xlsx') => {
  const now = new Date();
  const year = now.getFullYear();
  const month = String(now.getMonth() + 1).padStart(2, '0');
  const day = String(now.getDate()).padStart(2, '0');
  const hours = String(now.getHours()).padStart(2, '0');
  const minutes = String(now.getMinutes()).padStart(2, '0');
  const seconds = String(now.getSeconds()).padStart(2, '0');
  
  return `${baseName}_${year}${month}${day}_${hours}${minutes}${seconds}.${extension}`;
};

/**
 * 验证导出数据
 * @param {Array} data - 要导出的数据
 * @returns {boolean} 数据是否有效
 */
export const validateExportData = (data) => {
  if (!Array.isArray(data)) {
    message.error('导出数据格式错误');
    return false;
  }
  
  if (data.length === 0) {
    message.warning('没有数据可供导出');
    return false;
  }
  
  return true;
};

/**
 * 导出设备详情到Excel
 * @param {Object} device - 设备详情数据
 * @param {string} filename - 导出的文件名
 */
export const exportDeviceDetailToExcel = (device, filename = '设备详情.xlsx') => {
  try {
    if (!device) {
      message.warning('没有设备数据可供导出');
      return;
    }

    // 准备导出数据（键值对形式）
    const exportData = [
      { '字段': '设备名称', '值': device.deviceName || '' },
      { '字段': '设备编号', '值': device.deviceCode || '' },
      { '字段': '设备类型', '值': device.deviceType || '' },
      { '字段': '生产日期', '值': device.productionDate || '' },
      { '字段': '创建人', '值': device.createdBy?.phone || '' },
      { '字段': '创建时间', '值': device.createdAt || '' },
      { '字段': '更新时间', '值': device.updatedAt || '' },
      { '字段': '描述', '值': device.description || '' }
    ];

    // 创建工作簿
    const wb = XLSX.utils.book_new();
    
    // 创建工作表
    const ws = XLSX.utils.json_to_sheet(exportData);
    
    // 设置列宽
    const columnWidths = [
      { wch: 12 }, // 字段
      { wch: 40 }  // 值
    ];
    ws['!cols'] = columnWidths;

    // 添加工作表到工作簿
    XLSX.utils.book_append_sheet(wb, ws, '设备详情');
    
    // 导出文件
    XLSX.writeFile(wb, filename);
    
    message.success('设备详情导出成功');
  } catch (error) {
    console.error('导出Excel失败:', error);
    message.error('导出Excel失败，请稍后再试');
  }
};

/**
 * 导出选中的设备列表
 * @param {Array} selectedRowKeys - 选中的设备ID
 * @param {Array} allDevices - 所有设备列表
 * @param {Function} exportFunction - 导出函数
 */
export const exportSelectedDevices = (selectedRowKeys, allDevices, exportFunction) => {
  if (!selectedRowKeys || selectedRowKeys.length === 0) {
    message.warning('请先选择要导出的设备');
    return;
  }

  // 筛选出选中的设备
  const selectedDevices = allDevices.filter(device => 
    selectedRowKeys.includes(device.id)
  );

  if (selectedDevices.length > 0 && exportFunction && typeof exportFunction === 'function') {
    const filename = formatExportFilename(`选中设备列表_${selectedDevices.length}台`);
    exportFunction(selectedDevices, filename);
  }
};

/**
 * 批量操作前的确认提示
 * @param {string} operation - 操作名称
 * @param {number} count - 操作数量
 * @param {Function} confirmCallback - 确认后的回调函数
 */
export const showBatchOperationConfirm = (operation, count, confirmCallback) => {
  // 这里可以使用antd的Modal.confirm或其他确认组件
  // 由于这是工具函数，返回一个Promise供调用方处理确认逻辑
  return new Promise((resolve) => {
    if (confirmCallback && typeof confirmCallback === 'function') {
      confirmCallback().then(() => {
        resolve(true);
      }).catch(() => {
        resolve(false);
      });
    } else {
      // 默认直接确认
      resolve(true);
    }
  });
};